cmake_minimum_required(VERSION 3.20)
project(demo)
set(CMAKE_CXX_STANDARD 17)

# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/lib)
# 由于在Linux下生成的静态库默认不具有可执行权限，所以在指定静态库生成的路径的时候就不能使用EXECUTABLE_OUTPUT_PATH宏了，
# 而应该使用LIBRARY_OUTPUT_PATH，这个宏对应静态库文件和动态库文件都适用
# 设置动态库/静态库生成路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c)

# 在cmake中，如果要制作静态库，需要使用的命令如下：
# add_library(库名称 STATIC 源文件1 [源文件2] ...)
# 在Linux中，静态库名字分为三部分：lib+库名字+.a，此处只需要指定出库的名字就可以了，另外两部分在生成该文件的时候会自动填充。
add_library(calc STATIC ${SRC_LIST})

# 在cmake中，如果要制作动态库，需要使用的命令如下
# add_library(库名称 SHARED 源文件1 [源文件2] ...)
# 在Linux中，动态库名字分为三部分：lib+库名字+.so，此处只需要指定出库的名字就可以了，另外两部分在生成该文件的时候会自动填充。

# add_library(calc SHARED ${SRC_LIST})

set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install)

# 安装目标并指定 EXPORT
install(TARGETS calc
    EXPORT calcTargets # 导出到名为 "calcTargets" 的集合
    ARCHIVE DESTINATION lib # 静态库安装路径
    LIBRARY DESTINATION lib # 动态库安装路径
    PUBLIC_HEADER DESTINATION include # 头文件安装路径
)
# 安装导出文件（生成 calcTargets.cmake）
install(EXPORT calcTargets
        FILE calcTargets.cmake
        NAMESPACE calc::  # 为目标添加命名空间
        DESTINATION lib/cmake/calc  # 导出文件安装路径
)